public class List implements AbstractStructure
{
        protected Element first, last;
        protected int size;
        
        public List(){
                first=last=null;
                size=0;
        }
        
        public Element getFirst(){
                return first;
        }
        public void setFirst(Element first){
                this.first=first;
        }
        public Element getLast(){
                return last;
        }
        public void setLast(Element last){
                this.last=last;
        }
        public int getSize(){
                return size;
        }
        public void setSize(int size){
                this.size=size;
        }
        
        public void Append(Object obj){
                Element _new=new Element(obj);
                if(first == null) //adaugarea primului element
                        first=_new;
                if(last!=null)//adaugarea oricarui element diferit de primul
                        last.next=_new;
                last = _new;
                size++;
        }
        
        public int Count(){
                return size;
        }
        
        public Iterator CreateIterator(){
                return new ListIterator(this);
        }
        
        public void Remove(Object obj){
                //cautam elementul care trebuie sters
                Element q1=first,q2=first;
                while(q2!=null) {
                        if(q2.obj.equals(obj)){//il gasim
                                if(q2!=first)
                                        q1.next=q2.next;
                                else first=first.next;
                                return;
                        }
                        q1=q2;
                        q2=q1.next;
                }
        }
}